﻿using System;
using System.Collections.Generic;
using System.Linq;

namespace Black.SurfaceToolkit.Tools
{
    /// <summary>
    /// Argument pour le suivi des contacts.
    /// </summary>
    public class ContactTrackingEventArgs : EventArgs
    {
        #region Accesseurs

        /// <summary>
        /// Obtient la liste des contacts ajoutées.
        /// </summary>
        public List<CoreContact> Added
        {
            get;
            private set;
        }

        /// <summary>
        /// Obtient la liste des contacts supprimées.
        /// </summary>
        public List<CoreContact> Removed
        {
            get;
            private set;
        }

        /// <summary>
        /// Obtient la liste des contacts mis à jour.
        /// </summary>
        public List<CoreContact> Updated
        {
            get;
            private set;
        }

        #endregion

        #region Constructeurs

        /// <summary>
        /// Initialise une nouvelle instance de <see cref="T:Black.SurfaceToolkit.Tools.ContactTrackingEventArgs" />.
        /// </summary>
        /// <param name="p_oAdd">Contacts ajoutés.</param>
        /// <param name="p_oUpdate">Contacts mis à jour.</param>
        /// <param name="p_oRemove">Contacts supprimés.</param>
        public ContactTrackingEventArgs(List<CoreContact> p_oAdd, List<CoreContact> p_oUpdate, List<CoreContact> p_oRemove)
            : base()
        {
            // Recopie des données add

            this.Added = new List<CoreContact>();

            if (p_oAdd != null)
                this.Added.AddRange(p_oAdd.Select(i => i));

            // Recopie des données update

            this.Updated = new List<CoreContact>();

            if (p_oUpdate != null)
                this.Updated.AddRange(p_oUpdate.Select(i => i));

            // Recopie des données remove

            this.Removed = new List<CoreContact>();

            if (p_oRemove != null)
                this.Removed.AddRange(p_oRemove.Select(i => i));
        }

        #endregion
    }
}
